#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>

#include <stdlib.h>
#include <unistd.h>

int main(int argc, char const *argv[])
{   
    int fd;
    printf("-----正在打开----\n");
#ifdef RP
      fd = open("fifo1", O_RDONLY|O_NONBLOCK);
#else
      fd = open("fifo1", O_WRONLY|O_NONBLOCK);
#endif
    if(fd != -1)
        printf("-----打开成功----\n");
    else{
        printf("-----打开失败----\n");
        return -1;
    }

int data = 0;
ssize_t ret = 0;
#ifdef RP
      printf("---reading data---\n"); 
      while(1){
        
        ret = read(fd, &data, 4); // 非阻塞的， 只有当写进程运行时，才是阻塞的
        printf("read data is %d \n", data);
        data = 0;
      }
#else
    int i=0;
      while(1){
          data = i + 10;
          if(i % 100 == 0)  // 每100个数打印一次
            printf("----writing data(%d)---\n", i);
         
          ret = write(fd, &data, 4);  // PIPE_BUF写满了，则会阻塞
         
          if(i % 100 == 0)
            printf("--writed ok (%d)=>%ld--\n", i, ret);

        i++;
      }
#endif

    close(fd); // 关闭管道
    printf("---over---\n");
    return 0;
}
